import 'package:flutter/material.dart';
import 'package:english_words/english_words.dart';

void main() => runApp(new MyApp()); // =>单行函数或方法的简写

// 该应用程序继承了 StatelessWidget，这将会使应用本身也成为一个widget。
// 在Flutter中，大多数东西都是widget，包括对齐(alignment)、填充(padding)和布局(layout)
class MyApp extends StatelessWidget {


  //widget的主要工作是提供一个build()方法来描述如何根据其他较低级别的widget来显示自己。
  @override
  Widget build(BuildContext context) {
    return new MaterialApp(
    //更新MyApp的build方法。从MyApp中删除Scaffold和AppBar实例。
      // 这些将由RandomWordsState管理，这使得用户在下一步中从一个屏幕导航到另一个屏幕时
      // 可以更轻松地更改导航栏中的的路由名称。
      title: 'listview demo',
      home: new RandomWords(),
    );
  }

}


class RandomWords extends StatefulWidget {
  @override
  createState() => new RandomWordsState();
}

class RandomWordsState extends State<RandomWords>{

  // _suggestions列表以保存建议的单词对。 该变量以下划线（_）开头，
  // 在Dart语言中使用下划线前缀标识符，会强制其变成私有的
  final _suggestions = <WordPair>[];
  // 添加一个biggerFont变量来增大字体大小
  final _biggerFont = const TextStyle(fontSize: 18.0);


  // 1.构件一个listview，返回的是Widget类型
  Widget _buildSuggestions(){
    return new ListView.builder(itemBuilder: (context,i){
      //在每一列之前，添加一个1像素高的分割线widget
      if(i.isOdd) return new Divider();

      // 语法 "i ~/ 2" 表示i除以2，但返回值是整形（向下取整），比如i为：1, 2, 3, 4, 5
      // 时，结果为0, 1, 1, 2, 2， 这可以计算出ListView中减去分隔线后的实际单词对数量
      final index = i ~/ 2;
      if(index >=_suggestions.length){
        // 接着再生成10个单词，然后添加到建议列表
        _suggestions.addAll(generateWordPairs().take(10));
      }
      //对于每一个单词对，_buildSuggestions函数都会调用一次_buildRow。
      // 这个函数在ListTile中显示每个新词对，这使您在下一步中可以生成更漂亮的显示行
      return _buildRow(_suggestions[index]);
    });
  }
  Widget _buildRow(WordPair pair) {
    return new ListTile(
      title: new Text(
        pair.asPascalCase,
        style: _biggerFont,
      ),
    );
  }

  @override
  Widget build(BuildContext context) {
    return new Scaffold(
      appBar: new AppBar(title: new Text('Startup Name Generator'),),
      body: _buildSuggestions(),
    );
  }
}